package com.xl.utils.util;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.xl.utils.model.qo.PageQO;
import lombok.extern.slf4j.Slf4j;

/**
 * @Author xionglin
 * @Classname StartPageUtil
 * @Description 把分页前对分页查询对象PageQO的参数判断封装;这里使用分页插件PageHelper
 * @Date 2019/6/25 15:57
 */
@Slf4j
public class StartPageUtil {
    /**
     * 私有化构成器避免工具类被实例化
     */
    private StartPageUtil(){}

    /**
     * 首页
     */
    public static final int PAGE_NUM = 0;

    /**
     * 第一页的数据条数
     */
    public static final int PAGE_SIZE = 20;

    /**
     * 升序
     */
    public static final String SORT_ASC = "ASC";


    /**
     * 降序
     */
    public static final String SORT_DESC = "DESC";


    /**
     * 判断pageQO对象中的参数进行分页
     * @param pageQO
     * @return
     */
    public static final Page startPage(PageQO pageQO) {
        Page<Object> page = new Page<>();
        if (pageQO != null) {
            initSortBy(pageQO);
            if (pageQO.getPageNum() > 0 && pageQO.getPageSize() > 0) {
                if (pageQO.getSortField() == null) {
                    page = PageHelper.startPage(pageQO.getPageNum(), pageQO.getPageSize());
                    log.info("页码:  "+pageQO.getPageNum()+"     每页数据条数:  "+pageQO.getPageSize());
                } else {
                    page = PageHelper.startPage(pageQO.getPageNum(), pageQO.getPageSize(), getSortFieldAndSortBy(pageQO));
                    log.info("页码:  "+pageQO.getPageNum()+"     每页数据条数:  "+pageQO.getPageSize()+"   SortField:"+pageQO.getSortField()+"   SortBy:"+pageQO.getSortBy());
                }
            }else {
                //默认查询首页
                page = PageHelper.startPage(PAGE_NUM,PAGE_SIZE);
                log.info("select frist page");
            }
        }
        return page;
    }

    /**
     * 初始化排序方式
     * @param pageQO
     */
    private static void initSortBy(PageQO pageQO){
        log.info("init SortBy");
        if(pageQO.getSortBy() == null){
            //默认升序
            pageQO.setSortBy(SORT_ASC);
        }else {
            if (SORT_ASC.equals(pageQO.getSortBy().trim())||SORT_ASC.toLowerCase().equals(pageQO.getSortBy().trim())) {
                //升序
                pageQO.setSortBy(SORT_ASC);
            }else if(SORT_DESC.equals(pageQO.getSortBy().trim())||SORT_DESC.toLowerCase().equals(pageQO.getSortBy().trim())){
                //降序
                pageQO.setSortBy(SORT_DESC);
            }else{
                //默认升序
                pageQO.setSortBy(SORT_ASC);
            }
        }
    }


    /**
     * 获取排序字段和排序方式组成的字符串（中间有个空格）
     * @param pageQO
     * @return
     */
    private static String getSortFieldAndSortBy(PageQO pageQO){
        if(pageQO == null){
            return "";
        }
        StringBuilder sb = new StringBuilder();
       return  sb.append(pageQO.getSortField()).append(" ").append(pageQO.getSortBy()).toString();
    }

}
